package 设计模式.创建型.工厂模式.简单工厂模式.最初的样子一;


import 设计模式.创建型.工厂模式.简单工厂模式.IRuleConfigParser;
import 设计模式.创建型.工厂模式.简单工厂模式.InvalidRuleConfigException;
import 设计模式.创建型.工厂模式.简单工厂模式.JsonRuleConfigParser;
import 设计模式.创建型.工厂模式.简单工厂模式.PropertiesRuleConfigParser;
import 设计模式.创建型.工厂模式.简单工厂模式.RuleConfig;
import 设计模式.创建型.工厂模式.简单工厂模式.XmlRuleConfigParser;
import 设计模式.创建型.工厂模式.简单工厂模式.YamlRuleConfigParser;

public class RuleConfigSource {

    public RuleConfig load(String ruleConfigFilePath) throws InvalidRuleConfigException {

        String ruleConfigFileExtension = getFileExtension(ruleConfigFilePath);
        IRuleConfigParser ruleConfigParser;

        if ("json".equalsIgnoreCase(ruleConfigFileExtension)) {
            ruleConfigParser = new JsonRuleConfigParser();
        } else if ("xml".equalsIgnoreCase(ruleConfigFileExtension)) {
            ruleConfigParser = new XmlRuleConfigParser();
        } else if ("yaml".equalsIgnoreCase(ruleConfigFileExtension)) {
            ruleConfigParser = new YamlRuleConfigParser();
        } else if ("properties".equalsIgnoreCase(ruleConfigFileExtension)) {
            ruleConfigParser = new PropertiesRuleConfigParser();
        } else {
            throw new InvalidRuleConfigException("Rule config file format is not supported: " + ruleConfigFilePath);
        }

        String configText = "";

        //从ruleConfigFilePath文件中读取配置文本到configText中
        return ruleConfigParser.parse(configText);
    }

    private String getFileExtension(String filePath) {
        //...解析文件名获取扩展名，比如rule.json，返回json
        return "json";
    }
}